package com.example.demo.util;

import org.springframework.boot.env.YamlPropertySourceLoader;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.support.DefaultPropertySourceFactory;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.lang.Nullable;

import java.io.IOException;

/**
 * spring支持自定义.properties文件,不支持自定义.yml文件
 * 在 Spring 框架中，YamlPropertyLoaderFactory 通常用于支持 YAML 格式的配置文件加载。
 * 当我们需要让 Spring 能够解析 YAML 文件时，可以通过继承 DefaultPropertySourceFactory 来实现自定义的属性源工厂。
 */
public class YamlPropertyLoaderFactory extends DefaultPropertySourceFactory {

    @Override
    public PropertySource<?> createPropertySource(@Nullable String name, EncodedResource resource) throws IOException {
        if (resource == null) {
            return super.createPropertySource(name, resource);
        }

        return new YamlPropertySourceLoader().load(resource.getResource().getFilename(), resource.getResource()).get(0);

    }
}
